package com.wpp;

import org.junit.Test;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/*
 *字节输入/输出流：InputStream，OutputStream
 *字符输入/输出流：Reader,Writer
 *知识点：
 *   1.read()的理解：返回读入的一个字符，如果达到文件末尾，返回-1
 *   2.异常的处理：为了保证流资源一定可以执行关闭操作，需要使用try-catch-finally处理
 *   3.读入的文件一定要存在，否则会报FileNotFoundException
 *
 *
 *
 * */
public class IOTest {

    @Test
    public void test() {
        FileReader fileReader = null;
        try {
            //1.File类的实例化
            File file = new File("F:\\Java测试源代码\\day10-IO流\\hello.txt");

            //2.FileReader流的实例化
            fileReader = new FileReader(file);

            //3.读入的操作   第一种空参：一个字符一个字符的读数据。第二种char[]，一次读取多少数据
            int read = fileReader.read();
            while (read != -1) {
                System.out.print((char) read);
                read = fileReader.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.资源的关闭
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }


    /*
     * 写出数据到硬盘的文件里：
     *  1.输出操作，对应的File可以不存在的
     *       如果不存在，在输出的过程中，会自动创建此文件
     *       如果存在，则默认是覆盖原文件内容，但是，选用的构造器是FileWriter(File,true)对原文件基础上进行追加操作
     *
     *
     *
     *
     *
     *
     * */

    @Test
    public void test2() {
        FileReader fileReader = null;
        try {
            //1.File类的实例化
            File file = new File("F:\\Java测试源代码\\day10-IO流\\hello.txt");

            //2.FileReader流的实例化
            fileReader = new FileReader(file);

            //3.读入的操作   第一种空参：一个字符一个字符的读数据。第二种char[]，一次读取多少数据
            char[] chars = new char[5];
            int len;
            while ((len = fileReader.read(chars)) != -1) {
                System.out.println(fileReader.read(chars));
                for (int i = 0; i < len; i++) {
                    System.out.print(chars[i]);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.资源的关闭
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    /*
     * 写出数据到硬盘的文件里：
     *  1.输出操作，对应的File可以不存在的
     *       如果不存在，在输出的过程中，会自动创建此文件
     *       如果存在，则默认是覆盖原文件内容，但是，选用的构造器是FileWriter(File,true)对原文件基础上进行追加操作
     *
     *
     * */
    @Test
    public void test3() {
        FileWriter fileWriter = null;
        try {
            //1.File类的实例化
            File file = new File("F:\\Java测试源代码\\day10-IO流\\hello.txt");

            //2.FileReader流的实例化
            fileWriter = new FileWriter(file, true);
            fileWriter.write("34342");

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.资源的关闭
            if (fileWriter != null) {
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
